package com;

// 不允许类被继承
public final class Singleton4 {
    // 实例变量
    private String name = "1234";

    // 定义实例变量的时候直接初始化
    private static Singleton4 instance = null;

    // 私有化构造函数, 不允许外部new
    private Singleton4() {
    }

    /**
     * 第三种 性能很底, 所以下面第4中用 Double-Check 的方式提高效率
     * @return
     */
    public static  Singleton4 getInstance() {
        // 当 instance 为空时, 进入同步代码块,同时也避免了每次都要进入同步代码块, 可以调效率
        if (instance == null) {
            // 只有一个线程可以拿到Singleton4 的监视器
            synchronized (Singleton4.class){
                // 第二遍检查, 判断为null 时创建对象,
                if (instance == null) {
                    instance = new Singleton4();
                }

            }
        }
        return instance;
    }
}
